// ? Element 常用表单校验规则

import { checkPassword, checkUsername, IsJustWordValid, IsPath } from ".";

/**
 *  @rule 手机号
 */
export function checkPhoneNumber(rule: any, value: any, callback: any) {
  const regexp = /^(((13[0-9]{1})|(15[0-9]{1})|(16[0-9]{1})|(17[3-8]{1})|(18[0-9]{1})|(19[0-9]{1})|(14[5-7]{1}))+\d{8})$/;
  if (value === "") callback(new Error("请输入手机号码"));
  if (!regexp.test(value)) {
    callback(new Error("请输入正确的手机号码"));
  } else {
    return callback();
  }
}

// 只能含有中文和英文
export function JustCanChineseAndEnglish(rule: any, value: any, callback: any) {
  const regexp = /^[a-zA-Z\u4e00-\u9fa5]+$/;
  if (!regexp.test(value)) {
    return callback(new Error("只能包含中文或者英文"));
  } else {
    callback();
  }
}

// 只能含有中文和英文和数字
export function JustCanChineseAndEnglishAndNumber(rule: any, value: any, callback: any) {
  const regexp = /^[0-9a-zA-Z\u4e00-\u9fa5]+$/;
  if (!regexp.test(value)) {
    return callback(new Error("只能包含中文或者英文"));
  } else {
    callback();
  }
}

// 只能含有中文
export function JustCanChinese(rule: any, value: any, callback: any) {
  const regexp = /^[\u4e00-\u9fa5]+$/;
  if (!regexp.test(value)) {
    return callback(new Error("只能包含中文"));
  } else {
    callback();
  }
}

export function CheckName(rule: any, value: any, callback: any) {
  if (!IsJustWordValid(value)) {
    return callback(new Error("只能包含英文"));
  } else {
    callback();
  }
}

export function CheckPath(rule: any, value: any, callback: any) {
  if (!IsPath(value)) {
    return callback(new Error("无效路径"));
  } else {
    callback();
  }
}

export function validUsername(rule: any, value: any, callback: any) {
  if (!checkUsername(value)) {
    return callback(new Error("用户名为数字或者英文字母组成，且不能只包含数字"));
  } else {
    callback();
  }
}

export function validPassword(rule: any, value: any, callback: any) {
  if (value == "") {
    return callback();
  }

  if (!checkPassword(value)) {
    return callback(new Error("必须包含大写、特殊字符、数字、小写"));
  } else {
    callback();
  }
}

// 判断是否为hex
export function validHex(rule: any, value: any, callback: any) {
  if (/^#([0-9a-fA-F]{3}){1,2}$/.test(value)) {
    callback();
  } else {
    return callback(new Error("颜色必须为hex格式"));
  }
}
// 判断https开头
export function validHttp(rule: any, value: any, callback: any) {
  if (!/^(https:\/\/.*)?$/.test(value)) return callback(new Error("非法的地址"));
  callback();
}

// 校验身份证
export function checkIdCard(rule: any, idCard: any, callback: any) {
  if (
    !/(^([1-9]\d{5})(([\d]{2}(((0[13578]|1[02])((0[1-9])|([12][0-9])|(3[01])))|(((0[469])|11)((0[1-9])|([12][1-9])|30))|(02((0[1-9])|(1[0-9])|(2[1-8])))))|((([02468][048])|([13579][26]))(((0[13578]|1[02])((0[1-9])|([12][0-9])|(3[01])))|(((0[469])|11)((0[1-9])|([12][1-9])|30))|(02((0[1-9])|(1[0-9])|(2[1-9]))))))(\d{3})$)|(^(((1[1-5])|(2[1-3])|(3[1-7])|(4[1-6])|(5[0-4])|(6[1-5])|71|(8[12])|91)\d{4})(([\d]{4}(((0[13578]|1[02])((0[1-9])|([12][0-9])|(3[01])))|(((0[469])|11)((0[1-9])|([12][1-9])|30))|(02((0[1-9])|(1[0-9])|(2[1-8])))))|((((([02468][048])|([13579][26]))00)|([0-9]{2}(([02468][048])|([13579][26]))))(((0[13578]|1[02])((0[1-9])|([12][0-9])|(3[01])))|(((0[469])|11)((0[1-9])|([12][1-9])|30))|(02((0[1-9])|(1[0-9])|(2[1-9]))))))((\d{4})|(\d{3}[Xx]))$)/.test(
      idCard
    )
  )
    return callback(new Error("无效的身份证号码"));
  callback();
}

// 校验手机号
export function ValidPhone(phone: string) {
  return /^(((13[0-9]{1})|(15[0-9]{1})|(16[0-9]{1})|(17[3-8]{1})|(18[0-9]{1})|(19[0-9]{1})|(14[5-7]{1}))+\d{8})$/.test(phone);
}

// 校验https
// ^https:\/\/.{1,595}$
export function ValidHttps(rule: any, value: any, callback: any) {
  if (!value) return callback(new Error("不可为空"));
  if (!/^https:\/\/.{1,595}$/.test(value)) return callback(new Error("无效的https域名"));
  callback();
}
